﻿/**
* Скрипт отображающий грид управления пользователями
*/
var container = Ext.getCmp(sectionId);
Ext.onReady(function () {
    var checkboxModel = new Ext.grid.CheckboxSelectionModel();
    var usersGrid = {
        xtype: 'grid',
        frame: true,
        store: new Ext.data.JsonStore({
            root: 'data',
            idProperty: 'id',
            storeId: 'usersStore',
            fields: [
                {
                    name: 'id',
                    type: 'int'
                },
                'identity',
                'provider',
                'email',
                {
                    name: 'access',
                    type: 'int'
                },
                'firstName',
                'lastName',
                'surName',
                'city',
                'access',
                'website',
                'description',
                'blocked',
                'avatar',
                {
                    name: 'lastLogin',
                    type: 'date'
                },
                {
                    name: 'dateCreated',
                    type:' date'
                },
                {
                    name: 'dateModified',
                    type: 'date'
                }
            ]
        }),
        height: 400,
        autoExpandColumn: 'usersIdentityColumn',
        id: 'usersGrid',
        selModel: checkboxModel,
        colModel: new Ext.grid.ColumnModel({
            columns: [
                checkboxModel,
                {
                    header: 'ИД',
                    dataIndex: 'id',
                    id: 'usersIdColumn',
                    width: 30
                },
                {
                    header: 'Идентичность',
                    dataIndex: 'identity',
                    id: 'usersIdentityColumn',
                    width: 100,
                    renderer: function(value, metaData, record, rowIndex, colIndex, store) {
                        return getProviderIcon(record.get("provider"))+"&nbsp;"+value;
                    }
                },
                {
                    header: 'Email',
                    dataIndex: 'email',
                    id: 'usersEmailColumn',
                    width: 100
                },
                {
                    header: 'Город',
                    dataIndex: 'city',
                    id: 'usersCityColumn',
                    width: 100
                },
                {
                    header: 'Зарегистрирован',
                    dataIndex: 'dateCreated',
                    id: 'usersDateCreatedColumn',
                    width: 150
                },
                {
                    header: 'Последний заход',
                    dataIndex: 'lastLogin',
                    id: 'usersLastLoginColumn',
                    width: 150
                }
            ]
        }),
        tbar: [
            {
                text: 'Обновить список',
                handler: function() {
                    reloadUsers();
                }
            },
            '-',
            {
                text: 'Заблокировать',
                tooltip: 'Блокирует выбранных пользователей',
                handler: function(){

                }
            },
            {
                text: 'Разблокировать',
                tooltip: 'Разблокирует выбранных пользователей',
                handler: function(){

                }
            },
            '-',
            {
                text: 'Отправить сообщение',
                tooltip: 'Отправляет выбранным пользователям сообщение',
                handler: function(){
                    
                }
            }
        ],
        listeners: {
            rowdblclick: function(){
                var selected = Ext.getCmp('usersGrid').getSelectionModel().getSelected();
                showUserDialog(selected);
            }
        }
    };

container.add(usersGrid);
container.doLayout();

    /**
     * Загружает всех пользователей с сервера
     */
    function reloadUsers(){
        Ext.getCmp('usersGrid').el.mask("Идет загрузка списка пользователей","x-mask-loading");
        Ext.Ajax.request({
            url: '/ControlPanel/ManageUsers/GetUsers',
            params: {},
            success: function (response, request) {
                var data = Ext.util.JSON.decode(response.responseText);
                Ext.getCmp('usersGrid').el.unmask();
                if (data.result == "success") {
                    Ext.getCmp('usersGrid').getStore().loadData(data);
                } else if (data.result == "errors") {
                    Ext.Msg.alert('Ошибка на сервере', data.message);
                }
            },
            failure: function (response, request) {
                Ext.getCmp('usersGrid').el.unmask();
                var data = Ext.util.JSON.decode(response.responseText);
                Ext.Msg.alert('Ошибка', 'В ходе выполнения AJAX запроса возникла ошибка: ' + data.message);
            },
            method: 'POST'
        });
    }
    reloadUsers();

    /**
     * Получает картинку со ссылкой на поставщика авторизационных данныъ
     * @param provider
     */
    function getProviderIcon(provider){
        var name = provider.toLowerCase();
        var imgUrl = "";

        if (name.indexOf("yandex") != -1)
            imgUrl = "http://loginza.ru/img/providers/yandex.png";

        if (name.indexOf("google") != -1)
            imgUrl = "http://loginza.ru/img/providers/google.png";

        if (name.indexOf("vkontakte") != -1)
            imgUrl = "http://loginza.ru/img/providers/vkontakte.png";

        if (name.indexOf("mail.ru") != -1)
            imgUrl = "http://loginza.ru/img/providers/mailru.png";

        if (name.indexOf("twitter") != -1)
            imgUrl = "http://loginza.ru/img/providers/twitter.png";

        if (name.indexOf("loginza") != -1)
            imgUrl = "http://loginza.ru/img/providers/loginza.png";

        if (name.indexOf("myopenid") != -1)
            imgUrl = "http://loginza.ru/img/providers/myopenid.png";

        if (name.indexOf("openid") != -1)
            imgUrl = "http://loginza.ru/img/providers/openid.png";

        if (name.indexOf("webmoney") != -1)
            imgUrl = "http://loginza.ru/img/providers/webmoney.png";

        if (name.indexOf("facebook") != -1)
            imgUrl = "http://loginza.ru/img/providers/facebook.png";

        if (name.indexOf("gigasite") != -1)
            imgUrl = "/Content/images/g.png";

        return "<img src='"+imgUrl+"' alt='"+name+"'/>";
    }

    /**
     * Отображает диалог редактирования пользователя. Создавать пользователей нельзя
     * @param user - объект пользователя
     */
    function showUserDialog(user){
        if (user == null){
            return;
        }
        var wnd = new Ext.Window({
            title: 'Редактирование пользователя '+user.data.id,
            rezisable: true,
            height: 530,
            width: 500,
            items: [
                {
                    xtype: 'form',
                    bodyStyle: 'padding: 5px',
                    id: 'userForm',
                    labelAlign: 'top',
                    items: [
                        {
                            xtype: 'hidden',
                            id: 'userIdField',
                            value: user.data.id
                        },
                        {
                            xtype: 'compositefield',
                            items: [
                                {
                                    xtype: 'textfield',
                                    allowBlank: false,
                                    readonly: true,
                                    id: 'userIdentityField',
                                    fieldLabel: 'Идентити',
                                    value: user.data.identity,
                                    flex: 1
                                },
                                {
                                    xtype: 'textfield',
                                    allowBlank: false,
                                    readonly: true,
                                    id: 'userIdentityProviderField',
                                    fieldLabel: 'Провайдер',
                                    value: user.data.provider,
                                    flex: 1
                                },
                                {
                                    xtype: 'button',
                                    text: 'Фото',
                                    handler: function(){
                                        showUserPhoto(user);
                                    },
                                    width: 80
                                }
                            ]
                        },
                        {
                            xtype: 'checkbox',
                            boxLabel: 'Заблокирован',
                            id: 'userBlockedField',
                            checked: user.data.blocked,
                            hideLabel: true
                        },
                        {
                            xtype: 'textfield',
                            allowBlank: false,
                            readonly: true,
                            id: 'userEmailField',
                            fieldLabel: 'Email',
                            anchor: '100%',
                            value: user.data.email
                        },
                        {
                            xtype: 'textfield',
                            allowBlank: true,
                            readonly: false,
                            id: 'userWebsiteField',
                            fieldLabel: 'Web-сайт',
                            value: user.data.website,
                            anchor: '100%'
                        },
                        {
                            xtype: 'compositefield',
                            items: [
                                {
                                    xtype: 'textfield',
                                    allowBlank: true,
                                    id: 'userFirstNameField',
                                    fieldLabel: 'Имя',
                                    value: user.data.firstName,
                                    flex: 1
                                },
                                {
                                    xtype: 'textfield',
                                    allowBlank: true,
                                    id: 'userLastNameField',
                                    fieldLabel: 'Фамилия',
                                    value: user.data.lastName,
                                    flex: 1
                                },
                                {
                                    xtype: 'textfield',
                                    allowBlank: true,
                                    id: 'userSurNameField',
                                    fieldLabel: 'Отчество',
                                    value: user.data.surName,
                                    flex: 1
                                }
                            ]
                        },
                        {
                            xtype: 'textfield',
                            allowBlank: true,
                            id: 'userCityField',
                            anchor: '100%',
                            fieldLabel: 'Город',
                            value: user.data.city
                        },
                        {
                            xtype: 'numberfield',
                            allowBlank: false,
                            id: 'userAccessField',
                            anchor: '100%',
                            fieldLabel: 'Уровень доступа',
                            value: user.data.access
                        },
                        {
                            xtype: 'textarea',
                            allowBlank: false,
                            anchor: '100%',
                            id: 'userDescriptionField',
                            fieldLabel: 'Описание',
                            height: 100,
                            value: user.data.description
                        }
                    ]
                }
            ],
            buttons: [
                {
                    text: 'Сохранить',
                    handler: function(){

                    }
                },
                {
                    text: 'Закрыть',
                    handler: function(){
                        wnd.close();     
                    }
                }
            ]
        });
        wnd.show();
    }

});